home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
tex
/
td187src.lzh
/
MAGICXBI.I
< prev
next >
Wrap
Text File
|
1991-06-08
|
14KB
|
757 lines
(*######################################################################
MAGIC Modula's All purpose GEM Interface Cadre
¯ ¯ ¯ ¯ ¯
########################################################################
XBIOS Extended Basic Input Output System Interface for Modula-2
Implementation für Megamax-Modula-2
########################################################################
V2.00 16.10.90 Peter Hellinger Anpassung an neues MagicSys
V1.04 05.08.90 Peter Hellinger
V1.01 18.06.90 Peter Hellinger Bugs gefixed
V1.00 (c) by Peter Hellinger
######################################################################*)
IMPLEMENTATION MODULE MagicXBIOS;
(*------------------------------*)
(* MM2-COMPILERSWITCHES *)
(* *)
(*$R- Range-Checks *)
(*$S- Stack-Check *)
(*------------------------------*)
FROM SYSTEM IMPORT ADDRESS, ADR, WORD, BYTE, ASSEMBLER;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL, sBITSET,
lWORD, lINTEGER, lCARDINAL, lBITSET;
IMPORT MagicSys;
VAR a, b, d: ADDRESS;
c: sCARDINAL;
i: sINTEGER;
l: lINTEGER;
PROCEDURE Initmouse (type: sINTEGER; VAR param: ARRAY OF LOC; vec: PROC);
BEGIN
ASSEMBLER
MOVE.L vec(A6), -(SP)
MOVE.L param(A6), -(SP)
MOVE.W type(A6), -(SP)
MOVE.W #0, -(SP);
TRAP #14
LEA 12(SP), SP
END;
END Initmouse;
PROCEDURE Physbase (): ADDRESS;
BEGIN
ASSEMBLER
MOVE.W #2, -(SP);
TRAP #14
ADDQ.L #2, SP
MOVE.L D0, a
END;
RETURN a;
END Physbase;
PROCEDURE Logbase (): ADDRESS;
BEGIN
ASSEMBLER
MOVE.W #3, -(SP);
TRAP #14
ADDQ.L #2, SP
MOVE.L D0, a
END;
RETURN a;
END Logbase;
PROCEDURE Getrez (): sINTEGER;
BEGIN
ASSEMBLER
MOVE.W #4, -(SP);
TRAP #14
ADDQ.L #2, SP
MOVE.W D0, i
END;
RETURN i;
END Getrez;
PROCEDURE Setscreen (log, phys: ADDRESS; rez: sINTEGER);
BEGIN
ASSEMBLER
MOVE.W rez(A6), -(SP)
MOVE.L phys(A6), -(SP)
MOVE.L log(A6), -(SP)
MOVE.W #5, -(SP)
TRAP #14
LEA $C(SP), SP
END;
END Setscreen;
PROCEDURE Setpalette (VAR palette: ARRAY OF LOC);
BEGIN
ASSEMBLER
MOVE.L palette(A6), -(SP)
MOVE.W #6, -(SP)
TRAP #14
ADDQ.L #6, SP
END;
END Setpalette;
PROCEDURE Setcolor (colNum, color: sCARDINAL): sCARDINAL;
VAR c: sCARDINAL;
BEGIN
ASSEMBLER
MOVE.W color(A6), -(SP)
MOVE.W colNum(A6), -(SP)
MOVE.W #7, -(SP)
TRAP #14
ADDQ.L #6, SP
MOVE.W D0, c(A6)
END;
RETURN c;
END Setcolor;
PROCEDURE Floprd (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W count(A6), -(SP)
MOVE.W side(A6), -(SP)
MOVE.W trck(A6), -(SP)
MOVE.W sec(A6), -(SP)
MOVE.W drv(A6), -(SP)
MOVE.L #0, -(SP)
MOVE.L buf(A6), -(SP)
MOVE.W #8, -(SP)
TRAP #14
LEA $14(SP), SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Floprd;
PROCEDURE Flopwr (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W count(A6), -(SP)
MOVE.W side(A6), -(SP)
MOVE.W trck(A6), -(SP)
MOVE.W sec(A6), -(SP)
MOVE.W drv(A6), -(SP)
MOVE.L #0, -(SP)
MOVE.L buf(A6), -(SP)
MOVE.W #9, -(SP)
TRAP #14
LEA $14(SP), SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Flopwr;
PROCEDURE Flopfmt (buf: ADDRESS; drv, spt, trck, side, il, virgin: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W virgin(A6), -(SP)
MOVE.L #$087654321, -(SP)
MOVE.W il(A6), -(SP)
MOVE.W side(A6), -(SP)
MOVE.W trck(A6), -(SP)
MOVE.W spt(A6), -(SP)
MOVE.W drv(A6), -(SP)
MOVE.L #0, -(SP)
MOVE.L buf(A6), -(SP)
MOVE.W #10, -(SP)
TRAP #14
LEA $1A(SP), SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Flopfmt;
PROCEDURE Midiws (VAR string: ARRAY OF Byte; len: sCARDINAL);
BEGIN
ASSEMBLER
MOVE.L string(A6), -(SP)
MOVE.W len(A6), -(SP)
MOVE.W #12, -(SP)
TRAP #14
ADDQ.L #8, SP
END;
END Midiws;
PROCEDURE Mfpint (intNo: sCARDINAL; vector: PROC);
BEGIN
ASSEMBLER
MOVE.L vector(A6), -(SP)
MOVE.W intNo(A6), -(SP)
MOVE.W #13, -(SP)
TRAP #14
ADDQ.L #8, SP
END;
END Mfpint;
PROCEDURE Iorec (dev: sINTEGER): ADDRESS;
VAR a: ADDRESS;
BEGIN
ASSEMBLER
MOVE.W dev(A6), -(SP)
MOVE.W #14, -(SP)
TRAP #14
ADDQ.L #4, SP
MOVE.L D0, a(A6)
END;
RETURN a;
END Iorec;
PROCEDURE Rsconf (speed: sINTEGER; flavor: sBITSET; u, r, t, s: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W s(A6), -(SP)
MOVE.W t(A6), -(SP)
MOVE.W r(A6), -(SP)
MOVE.W u(A6), -(SP)
MOVE.W flavor(A6), -(SP)
MOVE.W speed(A6), -(SP)
MOVE.W #15, -(SP)
TRAP #14
LEA $E(SP), SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Rsconf;
PROCEDURE Keytbl (VAR unshift, shift, capslock: ADDRESS): ADDRESS;
BEGIN
a:= unshift;
b:= shift;
d:= capslock;
ASSEMBLER
MOVE.L a, -(SP)
MOVE.L b, -(SP)
MOVE.L d, -(SP)
MOVE.W #16, -(SP)
TRAP #14
LEA $E(SP), SP
MOVE.L D0, a
END;
RETURN a;
END Keytbl;
PROCEDURE Random(): lCARDINAL;
VAR l: lCARDINAL;
BEGIN
ASSEMBLER
MOVE.W #17, -(SP)
TRAP #14
ADDQ.L #2, SP
MOVE.L D0, l(A6)
END;
RETURN l;
END Random;
PROCEDURE Protobt (buf: ADDRESS; num: lINTEGER; typ, exec: sINTEGER);
BEGIN
ASSEMBLER
MOVE.W exec(A6), -(SP)
MOVE.W typ(A6), -(SP)
MOVE.L num(A6), -(SP)
MOVE.L buf(A6), -(SP)
MOVE.W #18, -(SP)
TRAP #14
LEA $E(SP), SP
END;
END Protobt;
PROCEDURE Flopver (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W count(A6), -(SP)
MOVE.W side(A6), -(SP)
MOVE.W trck(A6), -(SP)
MOVE.W sec(A6), -(SP)
MOVE.W drv(A6), -(SP)
MOVE.L #0, -(SP)
MOVE.L buf(A6), -(SP)
MOVE.W #19, -(SP)
TRAP #14
LEA $E(SP), SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Flopver;
PROCEDURE Scrdmp;
BEGIN
ASSEMBLER
MOVE.W #20, -(SP)
TRAP #14
ADDQ.L #2, SP
END;
END Scrdmp;
PROCEDURE Cursconf (function, operand: sINTEGER): sINTEGER;
VAR i: sINTEGER;
BEGIN
ASSEMBLER
MOVE.W operand(A6), -(SP)
MOVE.W function(A6), -(SP)
MOVE.W #21, -(SP)
TRAP #14
ADDQ.L #6, SP
MOVE.W D0, i(A6)
END;
RETURN i;
END Cursconf;
PROCEDURE Settime (datetime: lCARDINAL);
BEGIN
ASSEMBLER
MOVE.W datetime(A6), -(SP)
MOVE.W #22, -(SP)
TRAP #14
ADDQ.L #6, SP
END;
END Settime;
PROCEDURE Gettime (): lCARDINAL;
VAR l: lCARDINAL;
BEGIN
ASSEMBLER
MOVE.W #23, -(SP)
TRAP #14
ADDQ.L #6, SP
MOVE.L D0, l(A6)
END;
RETURN l;
END Gettime;
PROCEDURE Bioskeys;
BEGIN
ASSEMBLER
MOVE.W #24, -(SP)
TRAP #14
ADDQ.L #2, SP
END;
END Bioskeys;
PROCEDURE Ikbdws (str: ARRAY OF LOC; len: sCARDINAL);
BEGIN
ASSEMBLER
MOVE.W str(A6), -(SP)
MOVE.W len(A6), -(SP)
MOVE.W #25, -(SP)
TRAP #14
ADDQ.L #8, SP
END;
END Ikbdws;
PROCEDURE Jdisint (intNo: sCARDINAL);
BEGIN
ASSEMBLER
MOVE.W intNo(A6), -(SP)
MOVE.W #26, -(SP)
TRAP #14
ADDQ.L #4, SP
END;
END Jdisint;
PROCEDURE Jenabint (intNo: sCARDINAL);
BEGIN
ASSEMBLER
MOVE.W intNo(A6), -(SP)
MOVE.W #27, -(SP)
TRAP #14
ADDQ.L #4, SP
END;
END Jenabint;
PROCEDURE Giaccess (regno: sCARDINAL; data: Byte): sCARDINAL;
VAR c: sCARDINAL;
BEGIN
c:= ORD (data);
ASSEMBLER
MOVE.W regno(A6), -(SP)
MOVE.W c(A6), -(SP)
MOVE.W #28, -(SP)
TRAP #14